package com.utils.sm;

import cn.hutool.crypto.SmUtil;
import org.apache.commons.lang3.StringUtils;

/**
 * 国密加解密
 *
 * @author water
 * @date 2023/2/2
 */
public class SmUtils {
    private SmUtils() {
    }

    /**
     * 加盐的摘要加密算法SM3
     *
     * @param text
     * @param salt     salt (默认值"")
     * @return 加密字符串
     */
    public static String encryptBySm3(String text, String salt) {
        if (salt == null) {
            salt = "";
        }
        return SmUtil.sm3WithSalt(salt.getBytes()).digestHex(text);
    }

    /**
     * 无盐的摘要加密算法SM3
     *
     * @param text
     * @return
     */
    public static String encryptBySm3(String text) {
        return encryptBySm3(text, "");
    }

    /**
     * 加盐的SM3判断
     *
     * @param raw     待验
     * @param encoded 比对
     * @param salt            salt (默认值"")
     * @return 相同=true
     */
    public static boolean matchesBySm3(String raw, String encoded, String salt) {
        if (salt == null) {
            salt = "";
        }
        return StringUtils.isNotEmpty(raw) && StringUtils.isNotEmpty(encoded) && encoded.equals(SmUtil.sm3WithSalt(salt.getBytes()).digestHex(raw));
    }

    /**
     * 无盐的SM3判断
     *
     * @param raw   待验
     * @param encoded   比对
     * @return 相同=true
     */
    public static boolean matchesBySm3(String raw, String encoded) {
        return matchesBySm3(raw, encoded, "");
    }
}
